package br.com.nemesis.modelo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Cliente  implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_CLIENTE")
    private Long id;

    private String nome;
    private String cpf;
    private Integer identidade;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "ID_BAIRRO")
    private Bairro bairro;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "ID_CIDADE")
    private Cidade cidade;

    @Column
    @Temporal(TemporalType.DATE)
    private Date nascimento;

    public Bairro getBairro() {
        return bairro;
    }

    public void setBairro(Bairro bairro) {
        this.bairro = bairro;
    }

    public Cidade getCidade() {
        return cidade;
    }

    public void setCidade(Cidade cidade) {
        this.cidade = cidade;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getIdentidade() {
        return identidade;
    }

    public void setIdentidade(Integer identidade) {
        this.identidade = identidade;
    }

    public Date getNascimento() {
        return nascimento;
    }

    public void setNascimento(Date nascimento) {
        this.nascimento = nascimento;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Cliente other = (Cliente) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if ((this.nome == null) ? (other.nome != null) : !this.nome.equals(other.nome)) {
            return false;
        }
        if (this.cpf != other.cpf && (this.cpf == null || !this.cpf.equals(other.cpf))) {
            return false;
        }
        if (this.identidade != other.identidade && (this.identidade == null || !this.identidade.equals(other.identidade))) {
            return false;
        }
        if (this.bairro != other.bairro && (this.bairro == null || !this.bairro.equals(other.bairro))) {
            return false;
        }
        if (this.cidade != other.cidade && (this.cidade == null || !this.cidade.equals(other.cidade))) {
            return false;
        }
        if (this.nascimento != other.nascimento && (this.nascimento == null || !this.nascimento.equals(other.nascimento))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 29 * hash + (this.nome != null ? this.nome.hashCode() : 0);
        hash = 29 * hash + (this.cpf != null ? this.cpf.hashCode() : 0);
        hash = 29 * hash + (this.identidade != null ? this.identidade.hashCode() : 0);
        hash = 29 * hash + (this.bairro != null ? this.bairro.hashCode() : 0);
        hash = 29 * hash + (this.cidade != null ? this.cidade.hashCode() : 0);
        hash = 29 * hash + (this.nascimento != null ? this.nascimento.hashCode() : 0);
        return hash;
    }

}